package com.em.common;

import com.em.common.model._MappingKit;
import com.em.controller.IndexController;
import com.em.frame.shiro.ShiroTag;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.ext.plugin.shiro.ShiroInterceptor;
import com.jfinal.ext.plugin.shiro.ShiroPlugin;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.template.Engine;

/**
 * Created by zlx on 2017/11/22 0022.
 */
public class SystemConfig extends JFinalConfig {

    /**
     * 供Shiro插件使用。
     */
    private Routes routes;

    public static void main(String[] args) {
        JFinal.start("src/main/web", 80, "/");
    }

    /**
     * 配置常量
     */
    public void configConstant(Constants constants) {
        PropKit.use("resources.properties");
        constants.setDevMode(PropKit.getBoolean("devMode", false));
        constants.setError401View("/401.html");
        constants.setError403View("/403.html");
        constants.setError404View("/404.html");
        constants.setError500View("/500.html");
    }

    /**
     * 配置路由
     */
    public void configRoute(Routes me) {
        this.routes = me;
        routes.setBaseViewPath("/WEB-INF/html");
        routes.add("/", IndexController.class);
    }

    /**
     * 配置模板引擎
     */
    public void configEngine(Engine engine) {
        engine.addSharedObject("shiro", new ShiroTag());
    }
    /**
     * 配置插件
     */
    public void configPlugin(Plugins plugins) {
        // 配置 druid 数据库连接池插件
        DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
        plugins.add(druidPlugin);

        // 配置ActiveRecord插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        // 所有映射在 MappingKit 中自动化生成
        _MappingKit.mapping(arp);
        plugins.add(arp);

        //配置缓存插件
        plugins.add(new EhCachePlugin());

        //加载Shiro插件
        plugins.add(new ShiroPlugin(routes));
    }




    /**
     * 提供数据源给Model生成器使用
     * @return
     */
    public static DruidPlugin createDruidPlugin() {
        return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
    }
    /**
     * 配置全局拦截器
     */
    public void configInterceptor(Interceptors interceptors) {
        interceptors.add(new ShiroInterceptor());
    }
    /**
     * 配置处理器
     */
    public void configHandler(Handlers handlers) {
    }
}
